udemy gRPC: intro
#gRPC
Why should learn?
多くの企業が製品に使ってる
Google
Netflix
Square
CoreOS
Cockroach DB
gRPC は モバイルAPI / マイクロサービスAPI の未来だから (あと Web も)
Course Structure
Concept
gRPC implementation
Advanced Concepts
Concept
Protobuf vs Json
json のパースは cpu 負荷が高い (コンピュータよりも、人間に読みやすいフォーマットのせい)
protobuf のパースは cpu 負荷が軽い (マシンコードに近い)
サイズも protobuf のほうが小さい 。帯域を専有しない
高速 & 効率的ということ
Implement
GRPC-Java
GRPC-Go
GRPC-C
これらは公式の pure な実装がある。
C++, Python, Ruby, Objective C, PHP, C#
これらは GRPC-C に依存する(FFI)
HTTP/2
http/1.1
1request につき 1 connectio のみ
データの重複 (cookie, header)
Request と Response の仕組みだけしかない。
実質 GET と POST しかない
push stream の仕組みがない (1リクエストに対する複数メッセージ)
plain text (heavy)
http/2
おなじ TCP connection で parallel request
Header を HPACK で圧縮
必要なときだけ push
server can push stream
binary (light)
4 Type of gRPC
Unary
traditional api looks like
Server Streaming
Client Streaming
Bi Directional Streaming
stream <Message-Type>で rpcの入力/出力ををストリームにする
Scalability
gRPC サーバーはデフォルトで非同期通信
リクエストのたびにスレッドがブロックされない
なので、gRPC server は 100万以上の通信を並列でできる
gRPC Client は client side load balancing する。
Scalability の高さは、 Google が 毎秒 100億の gRPC リクエストをさばいていることが証明している
SSL
gRPC は SSL を使うことを提唱してくる(デフォルトで)
どの言語を使っても、gRPC は certificates の loadと暗号化機能を out of box で提供する
また、Interceptor を使うことで認証機能を追加できる
gRPC vs REST
高速で軽い (http/2 + protobuf > http/1.1 + json)
1つの通信で双方向ができる (http/1.1 だと client => server への送信のみ)
stream support
API は What にフォーカスする
動画配信、チャット、大容量アップロード、ライブ、単なるCRUD, トランザクション、何でも
REST は、 Data の 単発の CRUD 操作のみを焦点とする
Code generation が 1st class citizen
RPC base
async関数を呼び出す感覚で使える
REST は、url に verb を含めたりと、プログラムとちょっと違う観点が必要